﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sistema_Totem.Logica.Clases;

namespace Sistema_Totem.Vista.Proyectos
{
    public partial class ConsultarProyectoCompletoGerente : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (Session["tipo_usuario"].ToString() == null || Session["tipo_usuario"].ToString() != "Gerente de Proyecto")
                {
                    Response.Redirect("Login1.aspx");
                }
            }
            catch (NullReferenceException)
            {
                Response.Redirect("~/Vista/Login/Login1.aspx");
            }


            if (!IsPostBack)
            {
                BloquearCampos();
                CargaDatos();

            }

        }

        #region Bloquear Campos
        protected void BloquearCampos()
        {
            codigoproyecto.ReadOnly = true;
            nombreproyecto.ReadOnly = true;
            cliente.ReadOnly = true;
            area.ReadOnly = true;
            descripcion.ReadOnly = true;
            sistemalist.Visible = false;
            asistema.Visible = false;
            esistema.Visible = false;
            proyectosistema.Visible = true;
            pcasosdeuso.ReadOnly = true;
            pers.ReadOnly = true;
            prequerimientos.ReadOnly = true;
            ppropuesta.ReadOnly = true;
            pminuta.ReadOnly = true;
        }
        #endregion Bloquear Campos

        #region Botones Crear y Cancelar
        protected void cancelar_Click(object sender, EventArgs e)
        {
            //Response.Redirect("ListarProyecto.aspx");
        }

        protected void guardar_Click(object sender, EventArgs e)
        {
            try
            {
                //creamos un codigo automatico
                String codigo = new Proyecto().CodigoProyecto();

                String status = "Activo"; //seteamos el estatus a activo

                //List<Int32> listaplantilla = crearListaPlantillas(); //llenamos la lista de las plantillas para poder cargarla en la base de datos

                List<Int32> listainvolucrados = crearListaInvolucrados();


                //llenamos el objeto proyecto con los datos ingresados en la interfaz
                //con fecha inicio  del sistema y fecha fin nula porque aun no se ha terminado
                Proyecto proyect = new Proyecto(codigo, nombreproyecto.Text, DateTime.Now, DateTime.Now, descripcion.Text, status, area.Text);

                //Response.Redirect("ConsultarProyecto.aspx");

                //se hace un new proyecto
                Proyecto proy = new Proyecto();
                //llamo a agregar proyecto en Proyecto.cs
                //proy.AgregarProyecto(proyect, listaplantilla, listainvolucrados, Convert.ToInt32(cliente));
                int idproyecto = proy.BuscarUltimoIdProyecto();
                proy.ActualizarFecha(idproyecto);

                //le doy a la variable global el codigo autogenerado con el proyecto
                Session["proyecto"] = codigo;
                confirmmessage.Text = "Proyecto agregado exitosamente";
            }
            catch (Exception err)
            {
                errormessage.Text = err.Message;
            }

        }
        #endregion Botones Crear y Cancelar

        #region Cargar Datos
        protected void CargaDatos()
        {
            Proyecto proy = (Proyecto)Session["objProyecto"];
            descripcion.TextMode = TextBoxMode.MultiLine;
            //cliente.ReadOnly=true;

            try
            {
                //Se buscan los clientes en la base de datos para asignarlos al dropdownlist
                //List<Cliente> cl = new Cliente().ConsultarClientes();
                //Se buscan los involucrados para asignarlos al listBox
                //List<Involucrado> inv = new Involucrado().ConsultartodosTodosInvolucrado();
                //llenarInvolucrados(inv);
                //Se llenan los dropdownlist de cada modulo de plantillas
                //llenarCampos(1, pers);
                //llenarCampos(4, pminuta);
                //llenarCampos(2, ppropuesta);
                //llenarCampos(3, prequerimientos);
                //llenarCampos(5, pcasosdeuso);

                Proyecto proyect = new Proyecto().ConsultarDetalleProyecto1(proy.IdProyecto);
                codigoproyecto.Text = proyect.Codigos;
                nombreproyecto.Text = proyect.Nombres;
                area.Text = proyect.Area;
                ListItem p = new ListItem("Activo", "Activo");
                estado.Items.Add(p);
                p = new ListItem("Inactivo", "Inactivo");
                estado.Items.Add(p);
                p = new ListItem("Finalizado", "Finalizado");
                estado.Items.Add(p);
                estado.SelectedIndex = 0;
                descripcion.Text = proyect.Descripcion;
                List<Involucrado> invol = new Proyecto().BuscarNoInvolucrados(proyect.IdProyecto);
                for (int i = 0; i < invol.Count; i++)
                {
                    p = new ListItem(invol[i].Rol.Nombre + " - " + invol[i].Nombre, invol[i].Id.ToString());
                    sistemalist.Items.Add(p);
                }
                invol = new Proyecto().BuscarInvolucrados(proyect.IdProyecto);
                for (int i = 0; i < invol.Count; i++)
                {
                    p = new ListItem(invol[i].Rol.Nombre + " - " + invol[i].Nombre, invol[i].Id.ToString());
                    proyectosistema.Items.Add(p);
                }
                Cliente cl = new Proyecto().BuscarCliente(proy.IdProyecto);
                cliente.Text = cl.Nombre;

                pers.Text = new Proyecto().BuscarPlantilla(1, proy.IdProyecto);
                pminuta.Text = new Proyecto().BuscarPlantilla(4, proy.IdProyecto);
                ppropuesta.Text = new Proyecto().BuscarPlantilla(2, proy.IdProyecto);
                prequerimientos.Text = new Proyecto().BuscarPlantilla(3, proy.IdProyecto);
                pcasosdeuso.Text = new Proyecto().BuscarPlantilla(5, proy.IdProyecto);

            }
            catch (NullReferenceException)
            {
                errormessage.Text = "No se encontro informacion en la base de datos";
            }
            catch (Exception e)
            {
                errormessage.Text = e.Message;
            }
        }
        #endregion Cargar Datos

        #region Crear Lista Involucrados
        //se crea un procedimiento para llenar la lista de los involucrados para luego ser insertada en la base de datos
        protected List<Int32> crearListaInvolucrados()
        {
            List<Int32> invol = new List<Int32>();
            for (int i = 0; i < proyectosistema.Items.Count; i++)
            {
                invol.Add(Convert.ToInt32(proyectosistema.Items[i].Value));
            }
            return invol;
        }
        #endregion Crear Lista Involucrados

        #region Llenar en el DropDownList
        //En esta funcion se consultan todos los clientes existentes en la base de datos para llenarlos en el
        //dropdownlist


        //Este metodo llena todos los dropdown list de cada plantilla, ej. casos de uso, porpuesta, minutas, requerimientos... etc
        //se le pasa la opcion que es fija en la base de datos y el drop down list perteneciente
        protected void llenarCampos(int opcion, DropDownList campo)
        {
            List<Plantilla> pl = new Plantilla().ListarPlantillasDeterminadas(opcion);
            campo.Items.Add("Seleccione");
            for (int i = 0; i < pl.Count; i++)
            {
                Plantilla plant = pl[i];
                ListItem p = new ListItem(plant.Nombre, plant.Id.ToString());

                campo.Items.Add(p);
            }
        }
        //Se llenan los involucrados del sistema
        protected void llenarInvolucrados(List<Involucrado> involucrado)
        {
            for (int i = 0; i < involucrado.Count; i++)
            {
                Involucrado invol = involucrado[i];
                ListItem p = new ListItem(invol.Rol.Nombre + " - " + invol.Nombre, invol.Id.ToString());
                sistemalist.Items.Add(p);
            }
        }
        #endregion Llenar en el DropDownList

        #region Botones de los ListBox
        protected void asistema_Click(object sender, EventArgs e)
        {
            try
            {
                string persona = sistemalist.SelectedValue;
                string sel = sistemalist.SelectedItem.Text;
                int i = sistemalist.SelectedIndex;
                sistemalist.Items.Remove(sistemalist.SelectedItem);
                ListItem p = new ListItem(sel, persona);
                proyectosistema.Items.Add(p);
            }
            catch (Exception err)
            {
                errormessage.Text = err.Message;
            }
        }

        protected void esistema_Click(object sender, EventArgs e)
        {
            string persona = proyectosistema.SelectedValue;
            string sel = proyectosistema.SelectedItem.Text;
            int i = proyectosistema.SelectedIndex;
            proyectosistema.Items.Remove(proyectosistema.SelectedItem);
            ListItem p = new ListItem(sel, persona);
            sistemalist.Items.Add(p);
        }
        #endregion Botones de los ListBox


    }
}